﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using TrustX.Dados;
using AcadPos.Entity;
using System.Data.SqlClient;

namespace AcadPos.Data
{
    public class DBCidade
    {
        #region Listar Cidades x Estado
        public DataTable listarCidadesXEstado(string pEstado, string pCidade)
        {
            string SQL = @"SELECT tc.ID_CIDADE,
                                   tc.NOME_CIDADE,
                                   te.ESTADO,
                                   tc.SITUACAO
                            FROM   TB_ESTADO te
                                   JOIN TB_CIDADE tc
                                        ON  tc.ID_ESTADO = te.ID_ESTADO
                            WHERE te.ESTADO = @ESTADO";
            if (pCidade != string.Empty)
                SQL += @" AND tc.NOME_CIDADE LIKE '%' + @CIDADE + '%'";
            SQL += " ORDER BY tc.NOME_CIDADE";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ESTADO", SqlDbType.VarChar, pEstado);
            if (pCidade != string.Empty)
                db.AddParam("@CIDADE", SqlDbType.VarChar, pCidade);
            return db.GetDataTable();
        }
        #endregion

        #region Verificar Cidade no Estado
        public DataTable cidadeExisteNesteEstado(int pEstado, string pCidade)
        {
            string SQL = @" SELECT tc.ID_CIDADE
                           
                    FROM   TB_CIDADE tc
                           LEFT JOIN TB_ESTADO te ON  tc.ID_ESTADO = te.ID_ESTADO

                    WHERE te.ID_ESTADO = @ESTADO ";

            if (pCidade != string.Empty)
                SQL += @" AND UPPER(tc.NOME_CIDADE) = UPPER(@CIDADE) ";

            DataAccess db = new DataAccess(SQL);

            db.AddParam("@ESTADO", SqlDbType.Int, pEstado);
            if (pCidade != string.Empty)
                db.AddParam("@CIDADE", SqlDbType.VarChar, pCidade);
            return db.GetDataTable();
        }
        #endregion

        #region Inserir Cidade
        public bool inserirCidade(Cidade cidade, string usuario)
        {
            string SQL = @"INSERT INTO TB_CIDADE
                              (
                                ID_ESTADO,
                                NOME_CIDADE,
                                SITUACAO,
                                DATA_CADASTRO
                              )
                            VALUES
                              (
                                @ID_ESTADO,
                                UPPER(@NOME_CIDADE),
                                @SITUACAO,
                                GETDATE()
                              )";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_ESTADO", SqlDbType.Int, cidade.CodEstado);
            db.AddParam("@NOME_CIDADE", SqlDbType.VarChar, cidade.Descricao);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, cidade.Situacao);
            //return db.ExecuteNonQuery();

            bool inseriu = db.ExecuteNonQuery();

            if (inseriu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'INSERT',
                        'TB_CIDADE',
                        ((SELECT CAST(MAX(ID_CIDADE) AS VARCHAR) FROM TB_CIDADE) 
                        + ' | ' + CAST(@ID_ESTADO AS VARCHAR)
                        + ' | ' + UPPER(@NOME_CIDADE)
                        + ' | ' + UPPER(@SITUACAO)),
                        UPPER(@USUARIO),
                        GETDATE()
                      )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_ESTADO", SqlDbType.VarChar, cidade.CodEstado);
                db.AddParam("@NOME_CIDADE", SqlDbType.VarChar, cidade.Descricao);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, cidade.Situacao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }

            db.ExecuteNonQuery();
            return inseriu;
        }
        #endregion

        #region Alterar Cidade
        public bool alterarCidade(Cidade cidade, string usuario)
        {
            string SQL = @"UPDATE TB_CIDADE
                            SET    ID_ESTADO    = @ID_ESTADO,
                                   NOME_CIDADE  = UPPER(@NOME_CIDADE),
                                   SITUACAO     = @SITUACAO
                            WHERE  ID_CIDADE    = @ID_CIDADE";
            
            DataAccess db = new DataAccess(SQL);

            db.AddParam("@ID_CIDADE", SqlDbType.Int, cidade.CodCidade);
            db.AddParam("@ID_ESTADO", SqlDbType.Int, cidade.CodEstado);
            db.AddParam("@NOME_CIDADE", SqlDbType.VarChar, cidade.Descricao);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, cidade.Situacao);
            
            //return db.ExecuteNonQuery();

            bool atualizou = db.ExecuteNonQuery();
           
            if (atualizou)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'UPDATE',
                        'TB_CIDADE',
                        (CAST(@ID_CIDADE AS VARCHAR) 
                        + ' | ' + CAST(@ID_ESTADO AS VARCHAR) 
                        + ' | ' + UPPER(@NOME_CIDADE)
                        + ' | ' + UPPER(@SITUACAO)),
                        UPPER(@USUARIO),
                        GETDATE()
                      )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_CIDADE", SqlDbType.Int, cidade.CodCidade);
                db.AddParam("@ID_ESTADO", SqlDbType.Int, cidade.CodEstado);
                db.AddParam("@NOME_CIDADE", SqlDbType.VarChar, cidade.Descricao);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, cidade.Situacao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }

            db.ExecuteNonQuery();
            return atualizou;
        }
        #endregion

        #region Excluir Cidade
        public bool excluirCidade(Cidade cidade, string usuario)
        {
            string SQL = @"DELETE 
                            FROM   TB_CIDADE
                            WHERE  ID_CIDADE = @ID_CIDADE";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_CIDADE", SqlDbType.Int, cidade.CodCidade);
            //return db.ExecuteNonQuery();

            bool excluiu = db.ExecuteNonQuery();

            if (excluiu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'DELETE',
                        'TB_CIDADE',
                        (CAST(@ID_CIDADE AS VARCHAR)
                        + ' | ' + UPPER(CAST(@ID_ESTADO AS VARCHAR))
                        + ' | ' + UPPER(@NOME_CIDADE)
                        + ' | ' + UPPER(@SITUACAO)),
                        UPPER(@USUARIO),
                        GETDATE()
                      )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_CIDADE", SqlDbType.Int, cidade.CodCidade);
                db.AddParam("@ID_ESTADO", SqlDbType.Int, cidade.CodEstado);
                db.AddParam("@NOME_CIDADE", SqlDbType.VarChar, cidade.Descricao);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, cidade.Situacao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }

            db.ExecuteNonQuery();
            return excluiu;
        }
        #endregion

        #region Obter Dados Cidade
        public DataTable obterDadosCidade(int pCodCidade)
        {
            string SQL = @"SELECT tc.ID_CIDADE,
                                   tc.ID_ESTADO,
                                   tc.NOME_CIDADE,
                                   tc.SITUACAO
                            FROM TB_CIDADE tc
                             WHERE tc.ID_CIDADE = @ID_CIDADE";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_CIDADE", SqlDbType.Int, pCodCidade);
            try
            {
                db.AbrirConexao();
                SqlDataReader dr = db.ExecuteReader();
                Cidade cidade = new Cidade();
                if (dr.Read())
                {
                    cidade.CodCidade = pCodCidade;
                    cidade.CodEstado = Convert.ToInt32(dr["ID_ESTADO"].ToString());
                    cidade.Descricao = dr["NOME_CIDADE"].ToString();
                    cidade.Situacao = dr["SITUACAO"].ToString();
                }
                db.FecharConexao();
                return db.GetDataTable();                
            }
            catch
            {
                return null;
            }
        }
        #endregion
    }
}
